docs(adr): ADR-0130 status is Accepted, in ADR-0125's spelling, dated by its landing merge - #15704
Conversation
… by its landing merge The record's Status line said "Proposed — awaiting the maintainer's hand-merge, which is itself the acceptance act". A reader can only reach that line because the file is on `main`, i.e. because the hand-merge already happened, so the sentence disproves itself and names an event that can never occur again. It is also read as a gate: one seat has "re-read the Status line, never assume" in its standing check-in, which makes it a pause with no end condition. The line now carries the state and the act only, in the spelling ADR-0125 already uses: the landing merge, its PR, its commit and its date. Landing reading (the ORIGINAL landing, not the 2026-09-03 anchor migration): `git log --follow --diff-filter=A` and the REST commit list agree on `682d03ba7` (2026-09-01, `added` this path), whose message names PR #14151; `GET /pulls/14151` reports `merged: true`, `base.ref: main`, `merge_commit_sha: 682d03b...`, `merged_by.login: os-zhuang` — a human approver, which is the precondition the ruling sets for treating the merge as the acceptance act. Part of #15453 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
|
ACCEPT — governed in-seat review of PR #15704, head Implemented-by: Verified in a detached compare worktree at the PR head against merge-base Coverage of the card after this PR ( Landing regime: governed ( Generated by Claude Code |
Part of #15453
Ruling A (maintainer, 2026-09-05, decision batch #40, verbatim 「同意」, recorded on the card by the director seat) executed on one record:
docs/adr/0130-release-artifact-as-co-ownership-boundary.md. The other two records the ruling names are not in this PR — see Records not touched here.The one field that changes
Before — the
**Status**:field, soft-wrapped across source lines 3-5:After — one line, in ADR-0125's spelling (its own line 3 was read as the template, not recalled):
1 insertion, 3 deletionsin one file. The ruling names "line 3, its Status line"; in this record that field is soft-wrapped over source lines 3-5, so the whole field is replaced and nothing else. The trailing narrative goes with it because the ruling's rule is that the status line carries the state and the act and nothing else — and "Nothing below is settled until this record merges" is both narrative and false once the record is Accepted. Every other line of the file, including the 2026-09-02 addendum block that follows, is byte-identical.The landing reading — the ORIGINAL landing, not the anchor migration
The ruling quoted
09cc6be43for this record. That commit is the 2026-09-03 anchor migration; the card itself says the original landing is earlier and was not chased. It was chased here, in two independent channels that agree.git — the clone is shallow, so it was deepened first. That mattered: on the shallow tree
git log --followanswered with an unrelated 2026-09-04 commit. Aftergit fetch --deepen:REST —
GET /repos/objectstack-ai/objectstack/commits?path=docs/adr/0130-release-artifact-as-co-ownership-boundary.mdreturns 3 commits for the path (09cc6be432026-09-03,184f6b0ca2026-09-03,682d03ba72026-09-01); the oldest is682d03ba7, andGET /commits/682d03ba7reportsfiles[0].status: "added"for exactly this path, with the message naming PR #14151 (the repo squash-merges).Precondition set by the ruling — the landing PR's
merged_bymust be a human approver account.GET /repos/objectstack-ai/objectstack/pulls/14151, response fields quoted:{ "number": 14151, "merged": true, "merged_at": "2026-09-01T09:21:39Z", "merge_commit_sha": "682d03ba7e8325f8facd59bd71ece9fcb7ad6d3b", "base": { "ref": "main" }, "user": { "login": "os-sam" }, "merged_by": { "login": "os-zhuang", "type": "User", "id": 277994282 } }merged_by.loginisos-zhuang— one of the human approver accounts the ruling names, not a seat account and not an app. So "the merge was the acceptance act" holds for this record, and the date is its landing day, 2026-09-01 (the commit date andmerged_atfall on the same day).Records not touched here
**Original status**:history line is a grep near-miss, ⛔ deliberately untouched.skip-changeset);content/docs/releases/**untouched.Derived surfaces — none needs regeneration
Searched for anything that pins this record's Status or the word
Proposedfor it:docs/adr/README*anddocs/adr/index*do not exist (the only non-numbered file underdocs/adr/isPRIORITIZATION.md); no hit for0130undercontent/docs/**outsidecontent/docs/releases/**;scripts/check-adr-*.mjscarry no status ledger. The only repo-wide reference to the file by path isexamples/app-multi-package/README.md:3, a plain relative link with no line anchor, andcheck-adr-symbol-anchorsreports0 line anchors survivecorpus-wide, so the 2-line shortening moves no anchor.Gates
Family derived from the real change set, not from a hand-written list:
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat commit4e3ea9826(1 path vs merge base95d5cbb31) ⇒ 17 commands, all run, then reconciled with--ran:check-adr-links --self-test✅ check-adr-links --self-test: discrimination, census, ADR-0046 pin and baseline staleness all verifiedcheck-adr-links✅ check-adr-links: 650 relative link destination(s) under docs/adr/ resolvecheck-adr-symbol-anchors --self-test✅ ... every finding class provoked, healthy anchors silent, population live, wiring pinned (1919 live anchors)check-adr-symbol-anchors✅ check-adr-symbol-anchors: 1919 anchors across 135 records resolve ... 0 line anchors survive.pnpm check:adr-anchorscheck-adr-anchors: OK (53 anchored file(s), every governing ADR still referenced; 129 decision number(s) ...; 32821 citation(s) across 4037 file(s) resolve ...)pnpm check:doc-authoring✓ doc authoring guard: 14808 customer-facing string(s) across 756 spec sources cleanpnpm --filter @objectstack/lint run check:doc-formula-expressions✓ check:doc-formula-expressions (spec TSDoc, #6763): 9 @example(s) judged clean across 1178 packages/spec/src filespnpm check:nul-bytescheck-nul-bytes: OK (scanned 7588 text file(s) ... no raw ASCII control bytes).pnpm check:cross-package-test-inputsOK: 27 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.check-ci-filter-parityOK: all 148 declared cross-package glob(s) (102 unique) are covered by core or crosspkg ...check-closing-keyword-parity(+--self-test)check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators ...)check-comment-mask-corpus✓ comment-mask corpus sweep: 5973 files, 0 disagree, 0 unparseablepnpm check:driver-memory-censuscheck-driver-memory-census: OK — every declaration is ledgered, every ledger entry is livepnpm check:refd-timer-probe✓ check-refd-timer-probe self-test: 11 cases pass, negative controls included.pnpm check:watch-hint-literal✓ check-watch-hint-literal: 58 declaration(s) across 4 rostered name(s) ...pnpm check:pm-governed-merges✓ check-governed-merges --self-test: 274 assertions ... live: the real generator declared 9 output(s) and certified this treecheck-governed-merges --test docs/adr/0130-...md⛔ GOVERNED — a human merge is the review record for this PR (#9495 regime).— the expected predicate answer, not a failureTwo readings that are NOT MEASURED rather than green, stated so they are not misread:
exit 3 PREREQUISITE NOT MET(nonode_modules, then@objectstack/formula/@objectstack/lintnot built) were re-run afterpnpm installand the two package builds; the table reports the re-runs.pnpm lintdoes not apply to this diff, and this is a measurement, not a skip:eslint --no-inline-configon the edited file,--format json, returns 1 result witherrorCount: 0and the single warning "File ignored because no matching configuration was supplied.", andeslint.config.mjscontains zero.md/markdownentries. The diff touches exactly one file, and it is one eslint is not configured to read, so no untouched file's verdict can move.Governed-surface handling
docs/adr/**⇒ draft PR,os-zhuang+hotlongrequested, human merge. ⛔ Not flipped ready by the seat, ⛔ not enqueued, ⛔ no auto-merge, ⛔ no self-approval.Part of #15453rather than a closing keyword, because two records on that card are still outstanding.🤖 Generated with Claude Code
https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Generated by Claude Code